﻿using DTO;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Linq;


namespace BLL
{
    public partial class ExcelFunc
    {
        private static Dictionary<string, DataTable> _ErrorList = new Dictionary<string, DataTable>();
        
        public Dictionary<string, DataTable> ErrorList
        {
            get { return _ErrorList; }
        }

        private void CheckColPhoneInTable(DataTable dt)
        {
            List<DataRow> ErrorList = new List<DataRow>();
            ArrayList listTmp = new ArrayList();
            string message = "";
            foreach (DataRow row in dt.Rows)
            {
                try
                {
                    //Check Column Mobile Phone
                    if (row["CellPhoneNumber"].ToString() != "")
                    {
                        Int64.Parse(row["CellPhoneNumber"].ToString());
                        if (row["CellPhoneNumber"].ToString().Length < 9)
                        {
                            ErrorList.Add(row);
                            listTmp.Add(dt.Rows.IndexOf(row));
                            message = "Lỗi ở cột số điện thoại";
                        }
                    }
                    else
                    {
                        //Check Column Home Phone
                        if (row["HomePhoneNumber"].ToString() != "")
                        {
                            Int64.Parse(row["HomePhoneNumber"].ToString());
                            if (row["HomePhoneNumber"].ToString().Length < 9)
                            {
                                ErrorList.Add(row);
                                listTmp.Add(dt.Rows.IndexOf(row));
                                message = "Lỗi ở cột số điện thoại";
                            }
                        }
                        else
                        {
                            //Check Column Office Phone
                            if (row["OfficePhoneNumber"].ToString() != "")
                            {
                                Int64.Parse(row["OfficePhoneNumber"].ToString());
                                if (row["OfficePhoneNumber"].ToString().Length < 9)
                                {
                                    ErrorList.Add(row);
                                    listTmp.Add(dt.Rows.IndexOf(row));
                                    message = "Lỗi ở cột số điện thoại";
                                }
                            }
                        }
                    }
                }
                catch
                {
                    //Failed to parse mean it's not a number
                    ErrorList.Add(row);
                    listTmp.Add(dt.Rows.IndexOf(row));
                    message = "Lỗi ở cột số điện thoại";
                }                 
            }
            if (ErrorList.Count > 0)
            {
                //Summary and save in storage
                _ErrorList.Add(message, ErrorList.CopyToDataTable());
            }
            //free resource
            ErrorList = null;
            listTmp = null;
            GC.Collect();  
        }

        private void CheckCollectorCodeInTable(DataTable table)
        {
            DataTable dttmp = new DataTable();
            string message = "";
            dttmp = table.Clone();
            foreach (DataRow row in table.Rows)
            {
                string collectorcode = row["Collector_ID"].ToString().Trim();
                if (string.IsNullOrWhiteSpace(collectorcode))
                {
                    dttmp.Rows.Add(row.ItemArray);
                    message = "Lỗi ở cột mã người thu thập";
                }
                else if (SharedData.CollectorList.Where(a => a.Collector_Code == collectorcode).ToList().Count == 0)
                {
                    dttmp.Rows.Add(row.ItemArray);
                    message = "Lỗi ở cột mã người thu thập";
                } 
            }
            if (!string.IsNullOrEmpty(message))
            {
                _ErrorList.Add(message, dttmp.Copy());
            }
        }

        private void CheckBrandCodeInTable(DataTable table)
        {
            DataTable dttmp = new DataTable();
            string message = "";
            dttmp = table.Clone();
            foreach (DataRow row in table.Rows)
            {
                string currentbrand = row["CurrentBrandName"].ToString().Trim();
                string previousbrand = row["PreviousBrandName"].ToString().Trim();
                if (string.IsNullOrEmpty(currentbrand))
                {
                    row["CurrentBrandName"] = "NONE";
                }
                if (string.IsNullOrEmpty(previousbrand))
                {
                    row["PreviousBrandName"] = "NONE";
                }                              
            }
            table.AcceptChanges();
            foreach (DataRow row in table.Rows)
            {
                string currentbrand = row["CurrentBrandName"].ToString().Trim();
                string previousbrand = row["PreviousBrandName"].ToString().Trim();
                if (SharedData.BrandList.Where(a => a.Brand_Code == currentbrand).ToList().Count == 0 ||
                    SharedData.BrandList.Where(a => a.Brand_Code == previousbrand).ToList().Count == 0)
                {
                    dttmp.Rows.Add(row.ItemArray);
                    message = "Lỗi ở cột mã sữa";
                }  
            }
            if (!string.IsNullOrEmpty(message))
            {
                _ErrorList.Add(message, dttmp.Copy());
            }
        }

        public bool IsColNameRight(DataTable dt)
        {
            foreach (DataColumn col in dt.Columns)
            {
                col.ColumnName = col.ColumnName.Trim();
            }
            if (dt.Columns[0].ColumnName == "Data Source" &&
                    dt.Columns[1].ColumnName == "Collected Date" &&
                    dt.Columns[2].ColumnName == "Collected By" &&
                    dt.Columns[3].ColumnName == "Clinic Name" &&
                    dt.Columns[4].ColumnName == "Last Name" &&
                    dt.Columns[5].ColumnName == "First Name" &&
                    dt.Columns[6].ColumnName == "Home Phone" &&
                    dt.Columns[7].ColumnName == "Office Phone" &&
                    dt.Columns[8].ColumnName == "Mobile Phone" &&
                    dt.Columns[9].ColumnName == "Home Number" &&
                    dt.Columns[10].ColumnName == "Substreet" &&
                    dt.Columns[11].ColumnName == "Street" &&
                    dt.Columns[12].ColumnName == "Ward" &&
                    dt.Columns[13].ColumnName == "District" &&
                    dt.Columns[14].ColumnName == "City" &&
                    dt.Columns[15].ColumnName == "Week" &&
                    dt.Columns[16].ColumnName == "EDD" &&
                    dt.Columns[17].ColumnName == "Mom Current Brand Name" &&
                    dt.Columns[18].ColumnName == "Mom Previous Brand Name")
            {
                return true;
            }
            else
            {
                return false;
            }
        }


    }
}
